package fidel.permission.controller;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import fidel.permission.exception.CustomException;
import fidel.permission.po.ActiveUser;
import fidel.permission.service.SysService;

/**
 * 
 * 登录和退出
 * 
 * @author fidel
 * @date 2021年5月
 * @version 1.0
 */
@Controller
public class HandlerController {

    @Autowired
    private SysService sysService;

    /**
     * 
     * 处理用户的登录请求
     * 
     * @param session    会话
     * @param randomcode 输入的验证码
     * @param usercode   用户账号
     * @param password   用户密码
     * @return 视图名称
     * @throws Exception
     */
    @RequestMapping("/login")
    public String login(HttpSession session, String randomcode, String usercode, String password) throws Exception {
        /*校验验证码，防止恶性攻击
        从session获取正确验证码*/
        String validateCode = (String) session.getAttribute("validateCode");
        // 输入的验证和session中的验证进行对比
        if (!randomcode.equals(validateCode)) {
            // 抛出异常
            throw new CustomException("验证码输入错误");
        }
        // 调用service校验用户账号和密码的正确性
        ActiveUser activeUser = sysService.authenticateAndAuthorize(usercode, password);
        // 如果service校验通过，将用户身份记录到session
        session.setAttribute("activeUser", activeUser);
        // 请求重定向
        return "redirect:/index.action";
    }

    // 主页
    @RequestMapping("/index")
    public String home() throws Exception {
        return "homepage";
    }

    // 用户退出
    @RequestMapping("/logout")
    public String logout(HttpSession session) throws Exception {
        // session失效
        session.invalidate();
        // 请求重定向
        return "redirect:/login.action";
    }

}
